A hypervisor is a layer of software positioned just above the hardware whose primary job is to direct the creation and management of partitions. Partitions are virtualization containers to which processor, memory, and device resources can be assigned. Software running within a partition is referred to as a guest.
Executable modules are built and packaged as structured files and contain the code and data necessary for their function. A section is the basic unit of code or data within a module. Sections have attributes that control access to the data in the section. The attributes that control read and write access to a section are dependent on the type data contained in the section. Code sections are typically write protected. Data sections can either be write enabled or write protected, depending on whether the data in the section is supposed to remain constant for the entire lifetime of the module.
Operating systems provide execution containers, each having their own virtual address space mapped on to the physical memory resources in the computer. The virtual address space is divided into fixed size pages.
Modules are loaded by mapping the contents of their sections into the pages of the virtual address space. The attributes of the sections are translated into attributes of the pages on which they are mapped based on the content of the section. Operating systems track the mappings of loaded modules for various reasons including, paging, physical resource sharing, and debugging.
Virtual memory managers utilize persistent storage devices to provide a repository for pages in the virtual address space that are not currently backed by the computer's physical random access memory (RAM) resources. Pages representing code sections are often write protected, as are pages representing some data sections, and are not paged to the backing store. Because the operating system tracks the modules that have been loaded in each address space, which may also include the individual properties of each segment in the module, the immutable sections can be reloaded from the module instead of the backing store when the pages representing those sections need to be accessed.
However, in a virtualized environment, operating systems running in separate partitions have no knowledge of the modules that are loaded in other partitions and therefore can not take advantage of the physical resource sharing opportunities that are available between multiple processes in a single partition.
Thus, needed are processes and a system that addresses the shortcomings of the prior art.